package com.cobra.wc

import org.apache.spark.{SparkConf, SparkContext}
//sc.textFile("/opt/module/data/word.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect().foreach(println);
object Spark03_WordCount {
  def main(args: Array[String]): Unit = {
    //建立和Spark框架的连接
    val conf = new SparkConf().setMaster("local").setAppName("WordCount")
    val sc = new SparkContext(conf)
    //1.读取数据，获取一行一行的数据
    val lines = sc.textFile("datas")
    //2.将一行数据进行拆分，形成一个一个单词
    //扁平化:将整体拆分成个体的操作
    val words = lines.flatMap(_.split(" "))
    val wordToOne = words.map(
      word => (word, 1)
    )
    //Spark框架提供了更多的功能，可以将分组和聚合使用一个方法实现
    //3. 将数据进行分组便于统计,分组的标志是元组tuple的第一个元素也就是单词
    //reduceByKey:相同的key的数据,可以对value进行reduce和聚合
    val wordToCount = wordToOne.reduceByKey(_+_)

    //4.将转换结果进行采集
    val tuples = wordToCount.collect()
    tuples.foreach(println)
    //关闭连接
    sc.stop()
  }
}
